<?php

/**
 * Zen_Form
 *
 * Класс наследник Zend_Form, помогает настроить окружение.
 * Все наши формы будут наследоваться от этого класса.
 *
 * @author Александр Махомет aka San для http://zendframework.ru
 */
class Zen_Form extends ZendX_JQuery_Form

{

	protected $hash = false;
	
	protected $wrap_elements = false;

	private function  getHash(){
		$uniqueSalt = Zend_Crypt::hash('MD5', uniqid() . microtime());
		$name='csrf_token_'.trim(md5(get_class($this)));

		$csrfToken = new Zend_Form_Element_Hash($name);
		$csrfToken->setSalt($uniqueSalt);
		$csrfToken->setTimeout(600000);
		$csrfToken->setDecorators(array('ViewHelper'));


		return $csrfToken;
	}
	/**
	 * Инициализация формы
	 *
	 * return void
	 */
	public function init()
	{
		// Вызов родительского метода
		parent::init();

		// Создаем объект переводчика, он нам необходим для перевода сообщений об ошибках.
		// В качестве адаптера используется php массив

		$translator = new Zend_Translate('array', APPLICATION_PATH."/../library/Zen/Errors.php");

		 // Задаем объект переводчика для формы
		$this->setTranslator($translator);

		$this->setAttrib('enctype', 'multipart/form-data');

		if ($this->hash) {
			$hash=$this->getHash();
			$this->addElement($hash);
		}

		/* Задаем префиксы для самописных элементов, валидаторов, фильтров и декораторов.
		 Благодаря этому Zend_Form будет знать где искать наши самописные элементы */
		$this->addElementPrefixPath('Zen_Validate', 'Zen/Validate/', 'validate');
		$this->addElementPrefixPath('Zen_Filter', 'Zen/Filter/', 'filter');
		$this->addElementPrefixPath('Zen_Decorator', 'Zen/Decorator/', 'decorator');

	}

	 public function render(Zend_View_Interface $view = null){
	 	if ($this->hash) {
		 	$subforms=$this->getSubForms();
			if(sizeof($subforms)>0){
				$name='cs_rf_'.trim(md5(get_class($this)).'csrf_token');
				$hash=$this->getElement($name);
				$this->removeElement($name);
				reset($subforms);
				$firstForm=key($subforms);
				$this->getSubForm($firstForm)->addElement($hash);
			}
	 	}
	 	if ($this->wrap_elements) {
	 		$this->addDecorator('HtmlTag', array('tag' => 'div',  ));
		 	$elevents = $this->getElements();
		 	if (count($elevents)) {
		 		foreach ($elevents as $elevent) {
		 			$elevent->addDecorator(array('s' => 'HtmlTag'), array('tag' => 'div','class'=>'clearfix'));
		 		}
		 	}
	 	}
	 	return(parent::render($view));
	 }





}